package com.ruoyi.drawing.test;

import lombok.extern.slf4j.Slf4j;

/**
 * 有效的括号
 *
 * @author ZhangYu
 * @date 2024/10/19 18:24
 */
@Slf4j
public class EffectiveParentheses {

    public static void main(String[] args) {
        String s = "([])";
        log.info("-------------------------------------------------------------------------{}", effectiveParentheses(s));
    }

    /**
     * 给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。
     * <p>
     * 有效字符串需满足：
     * <p>
     * 左括号必须用相同类型的右括号闭合。
     * 左括号必须以正确的顺序闭合。
     * 每个右括号都有一个对应的相同类型的左括号。
     * <p>
     * <p>
     * 示例 1：
     * <p>
     * 输入：s = "()"
     * <p>
     * 输出：true
     * <p>
     * 示例 2：
     * <p>
     * 输入：s = "()[]{}"
     * <p>
     * 输出：true
     * <p>
     * 示例 3：
     * <p>
     * 输入：s = "(]"
     * <p>
     * 输出：false
     * <p>
     * 示例 4：
     * <p>
     * 输入：s = "([])"
     * <p>
     * 输出：true
     *
     * @param s 输入字符串
     * @return 判断结果
     */
    private static boolean effectiveParentheses(String s) {
        char[] sArray = s.toCharArray();
        for (int i = 0; i < sArray.length - 1; i++) {
            log.info("{},{},{}", i, sArray[i], sArray[i + 1]);
            if (i % 2 != 0) {
                if (sArray[i] == '(' && sArray[i + 1] == ')') {
                    continue;
                }
                if (sArray[i] == '[' && sArray[i + 1] == ']') {
                    continue;
                }
                if (sArray[i] == '{' && sArray[i + 1] == '}') {
                    continue;
                }
            }
            if (i >= (sArray.length / 2) - 1) {
                if (sArray[i] == '(' && sArray[sArray.length - i - 1] == ')') {
                    continue;
                }
                if (sArray[i] == '[' && sArray[sArray.length - i - 1] == ']') {
                    continue;
                }
                if (sArray[i] == '{' && sArray[sArray.length - i - 1] == '}') {
                    continue;
                }
            }
            return false;
        }
        return true;
    }

}

